package cn.jokerq.service.impl;

import cn.jokerq.config.jedis.JedisUtils;
import cn.jokerq.po.User;
import lombok.extern.java.Log;
import cn.jokerq.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.HashMap;
import java.util.Map;

/**
 * @author JokerQ
 * @date 2020/3/11 - 22:04
 */
@Service
@Log // private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
public class UserServiceImpl implements UserService {

    @Autowired
    private JedisPool jedisPool;

    @Autowired
    private JedisUtils jedisUtils;

    @Override
    public String getString(String key) {
        String val = null;
        //1.得到Jedis对象
        Jedis jedis = jedisPool.getResource();
        //2.判断Key是否存在Redis

        if (jedis.exists(key)){
            log.info("查询Redis中的数据");
            val = jedis.get(key);
        } else {
            val = "jokerq";
            log.info("查询的是MySQL数据库"+val);
            jedis.set(key,val);
        }
        //关闭连接
        jedis.close();
        return val;
    }
    /**
     * 测试String类型
     * 需求：用户输入一个redis数据，该key的有效时间为28小时
     */

    @Override
    public void  expireStr(String key,String value){
        Jedis jedis = jedisUtils.getJedis();
        jedis.set(key,value);
        jedis.expire(key, 20);
        log.info(key+"\t设置值："+value+"\t"+20);
        jedisUtils.close(jedis);
    }

    /**
     * Hash类型演示
     * 存一个对象
     * 需求分析：
     *  用户在前端传入一个id编写，根据用户的id查询用户的对象信息
     *  判断如果Redis中存在，直接返回给用户结果并返回
     *  如果Redis中不存在，查询MySQL，并给查询的结果赋值给Redis并返回
     */

    @Override
    public User selectById(String id){
        String key = "user"+id;//实体类名：id
        //1、得到Jedis对象
        Jedis jedis = jedisUtils.getJedis();
        User user = new User();
        if(jedis.exists(key)){
            log.info("------------>查询的是Redis的数据");
            Map<String, String> map = jedis.hgetAll(key);
            user.setId(map.get("id"));
            user.setName(map.get("name"));
            user.setAge(Integer.parseInt(map.get("age")));
        }else {
            user.setId(id);
            user.setName("MR.JokerQ");
            user.setAge(31);
            log.info("------------>查询的是MySQL的数据"+user);
            Map<String,String> map = new HashMap<>();
            map.put("id",user.getId());
            map.put("name",user.getName());
            map.put("age",user.getAge()+"");
            jedis.hmset(key,map);
            log.info("------------>往Redis中进行存-->");
        }

        //2、实现业务逻辑判断
        //3、关闭Jedis连接
        jedisUtils.close(jedis);
        return user;
    }

}
